package com.kongmou.Springmvc.controller;

import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 
 * sse半双工通信 是 WebSocket 的一种轻量代替方案，使用 HTTP 协议，严格地说，HTTP
 * 协议是没有办法做服务器推送的，但是当服务器向客户端声明接下来要发送流信息时，客户端就会保持连接打开，SSE 使用的就是这种原理。
 * 
 * @author kongmou
 * @date 2018年3月15日上午11:42:41
 * @since jdk 1.8
 * 
 * @version 1.0
 */
@Controller
public class SseController {
	@RequestMapping(value = "/push", produces = "text/event-stream;charset=UTF-8")
	public @ResponseBody String push(){
		Random random = new Random();
		try {
			Thread.sleep(2000);//模拟业务
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//请注意，消息格式不是可选的：SSE 协议要求消息以 data: 开头，以 \n\n 结尾。尽管这些示例中使用了 HTTP 作为消息格式，但也可以使用 JSON 或另一种格式发送消息。
		//https://www.ibm.com/developerworks/cn/web/wa-http-server-push-with-websocket-sse/index.html?ca=drs-&utm_source=ifttt
		//return "data:SSE" + random.nextInt(5) + "\n\n";
		return "data:Testing 1,2,3" + random.nextInt() +"\n\n";
	}

}
